package com.bytz.modules.cms.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bytz.modules.cms.order.entity.OrderPayDetail;
import com.bytz.modules.cms.order.model.PayNotifyResult;

import java.util.List;

/**
 * <p>
 * 莱宝CMS—订单管理-订单交易支付明细表 服务类
 * </p>
 *
 * @author KyleWang
 * @since 2022-10-10
 */
public interface IOrderPayDetailService extends IService<OrderPayDetail> {

    /**
     * 因不会批量更新，只需要考虑添加
     */
    void saveOrderPayDetails(String orderId, String payId, List<OrderPayDetail> payDetails);

    /**
     * 通过订单Id获取
     * @param orderId 订单Id
     * @return 支付明细
     */
    List<OrderPayDetail> getByOrderId(String orderId);

    /**
     * 通过支付主Id获取
     */
    List<OrderPayDetail> getByPayId(String payId);

    /**
     * 通过支付Id和支付方式获取
     */
    List<OrderPayDetail> getOfflinePayByPayId(String orderPayId);

    /**
     * 线下支付完成提交
     */
    void submitOfflinePay(String orderPayId);

    /**
     * 线下支付失败回滚
     */
    void rollbackOfflinePay(String orderPayId);

    /**
     * 更新支付信息
     * @param payNotifyResult 支付结果
     */
    void updatePayResponse(PayNotifyResult payNotifyResult);

    /**
     * 在线付提交
     * @param orderPayDetail 支付明细
     * @param payNotifyResult 支付结果
     */
    void submitOnlinePay(OrderPayDetail orderPayDetail, PayNotifyResult payNotifyResult);

    /**
     * 在线付失败，回滚
     * @param orderPayDetail 支付明细
     * @param payNotifyResult 支付结果
     */
    void rollbackOnlinePay(OrderPayDetail orderPayDetail, PayNotifyResult payNotifyResult);

    /**
     * 记录错误消息
     */
    void logErrorMessage(String payDetailId, String message);
}
